package moduloIndexacion.analizador;

import java.util.ArrayList;
import java.util.Iterator;


import entidades.Documento;
import entidades.Extension;
import mapeo.MapExtension;

public class Analizador {
	
	private MapExtension mapExt;
	private ArrayList<TemplateAnalizador> listAnalizadores;

	public Analizador(){
		mapExt = new MapExtension();
		listAnalizadores = new ArrayList<TemplateAnalizador>();
		
		AnalizadorWord_Doc analizadorDoc = new AnalizadorWord_Doc();
		mapExt.save(analizadorDoc.getExtension());
		
		AnalizadorWord_Docx analizadorDocx = new AnalizadorWord_Docx();
		mapExt.save(analizadorDocx.getExtension());

		AnalizadorPDF analizadorPDF = new AnalizadorPDF();
		mapExt.save(analizadorPDF.getExtension());
		
		AnalizadorTxt analizadorTxt = new AnalizadorTxt();
		mapExt.save(analizadorTxt.getExtension());			
		
		AnalizadorExcel_xls analizadorXLS = new AnalizadorExcel_xls();
		mapExt.save(analizadorXLS.getExtension());
		
		AnalizadorExcel_xlsx analizadorXLSX = new AnalizadorExcel_xlsx();
		mapExt.save(analizadorXLSX.getExtension());
		
		AnalizadorPowerPoint_ppt analizadorPPT = new AnalizadorPowerPoint_ppt();
		mapExt.save(analizadorPPT.getExtension());
		
		AnalizadorPowerPoint_pptx analizadorPPTX = new AnalizadorPowerPoint_pptx();
		mapExt.save(analizadorPPTX.getExtension());
		
		setListAnalizadores();
	}
	
	/**
	 * Metodo que recibe un documento, procesa la extension que posee y en base a esto devuelve el texto del documento
	 * @param doc a analizar
	 * @return texto del documento
	 */
	public String getTexto(Documento doc){
		String texto;
		Iterator<TemplateAnalizador> iterador = listAnalizadores.iterator();
		while ( iterador.hasNext() ){
			TemplateAnalizador analiz = (TemplateAnalizador) iterador.next();
			if (doc.getExtension().compareTo( analiz.getExtension() ) == 0){
				texto = analiz.getTexto(doc);
				return texto;
			}
		}
		return null;
	}

	
	/**
	 * Get de la lista de analizadores que utiliza el sistema
	 * @return la lista de analizadores con los que trabaja actualmente el sistema.
	 */
	public ArrayList<TemplateAnalizador> getListAnalizadores() {
		return listAnalizadores;
	}	
	
	public void setListAnalizadores(){	
		ArrayList listExt = mapExt.obtenerExtensionesSistema();
		Iterator it = listExt.iterator();
		while(it.hasNext()){
			Extension aux = (Extension)it.next();
			switch ( aux.getClave() )  { 
		     case "pdf" : AnalizadorPDF analizadorPDF = new AnalizadorPDF(); 
		     			  listAnalizadores.add(analizadorPDF); 
		     			  break;
		     case "doc" : AnalizadorWord_Doc  analizadorDoc = new AnalizadorWord_Doc (); 
			  			  listAnalizadores.add(analizadorDoc); 
			  			  break;
		     case "docx": AnalizadorWord_Docx  analizadorDocx = new AnalizadorWord_Docx(); 
 			  			   listAnalizadores.add(analizadorDocx); 
 			  			   break; 
		     case "txt" : 	AnalizadorTxt analizadorTxt = new AnalizadorTxt(); 
 			   			  listAnalizadores.add(analizadorTxt); 
 			   			  break;
		     case "xls" : 	AnalizadorExcel_xls analizadorXLS = new AnalizadorExcel_xls(); 
   			  				listAnalizadores.add(analizadorXLS); 
   			  				break; 
		     case "xlsx" : 	AnalizadorExcel_xlsx analizadorXLSX = new AnalizadorExcel_xlsx(); 
   			  				listAnalizadores.add(analizadorXLSX); 
   			  				break; 
		     case "ppt" : 	AnalizadorPowerPoint_ppt analizadorPPT = new AnalizadorPowerPoint_ppt(); 
		     				listAnalizadores.add(analizadorPPT); 
		     				break; 
		     case "pptx" : 	AnalizadorPowerPoint_pptx analizadorPPTX = new AnalizadorPowerPoint_pptx(); 
   			  				listAnalizadores.add(analizadorPPTX); 
   			  				break;		     
		     default :    analizadorTxt = new AnalizadorTxt(); 
   			              listAnalizadores.add(analizadorTxt); 
   			              break;  
			}
		}
	}
}
